/*
 * led、灰度
 * 
 *
 */
#include "gpio.h"


/* LED使用PD2,PD3 */
static void gpio_led_init(void)
{
  GPIO_InitTypeDef GPIO_Config;
  __HAL_RCC_GPIOD_CLK_ENABLE();

  /* 高速推挽输出 */
  GPIO_Config.Pin = GPIO_PIN_2 | GPIO_PIN_3;
  GPIO_Config.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_Config.Pull = GPIO_PULLUP;
  GPIO_Config.Speed = GPIO_SPEED_HIGH;
  HAL_GPIO_Init(GPIOD, &GPIO_Config);

  /* 初始化完成熄灭led */
  HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, GPIO_PIN_SET);
  HAL_GPIO_WritePin(GPIOD, GPIO_PIN_3, GPIO_PIN_SET);
}



/* 灰度传感器  黑1, 白0 */
/* 前：PF15 PG1 PE8
 * 后：PC5 PF11 PF13
 * 右：PC4 PB0 PF12
 * 左：PF14 PG0 PE7
 */
static void gpio_gray_init(void)
{
  GPIO_InitTypeDef GPIO_Config;
  __HAL_RCC_GPIOB_CLK_ENABLE();
  __HAL_RCC_GPIOC_CLK_ENABLE();
  __HAL_RCC_GPIOE_CLK_ENABLE();
  __HAL_RCC_GPIOF_CLK_ENABLE();
  __HAL_RCC_GPIOG_CLK_ENABLE();
  
  /* 高速输入 */
  GPIO_Config.Mode = GPIO_MODE_INPUT;
  GPIO_Config.Pull = GPIO_NOPULL;
  GPIO_Config.Speed = GPIO_SPEED_HIGH;

  GPIO_Config.Pin = GPIO_PIN_0;
  HAL_GPIO_Init(GPIOB, &GPIO_Config);
  
  GPIO_Config.Pin = GPIO_PIN_4 | GPIO_PIN_5;
  HAL_GPIO_Init(GPIOC, &GPIO_Config);
  
  GPIO_Config.Pin = GPIO_PIN_7 | GPIO_PIN_8;
  HAL_GPIO_Init(GPIOE, &GPIO_Config);
  
  GPIO_Config.Pin = GPIO_PIN_11 |GPIO_PIN_12 | GPIO_PIN_13 | GPIO_PIN_14 | GPIO_PIN_15;
  HAL_GPIO_Init(GPIOF, &GPIO_Config);

  GPIO_Config.Pin = GPIO_PIN_0 | GPIO_PIN_1;
  HAL_GPIO_Init(GPIOG, &GPIO_Config);
}



static void gpio_ps2_init(void)
{
  GPIO_InitTypeDef GPIO_Initstruct;
  __HAL_RCC_GPIOE_CLK_ENABLE();

  GPIO_Initstruct.Pin = GPIO_PIN_3;
  GPIO_Initstruct.Mode = GPIO_MODE_INPUT;      //推挽输出
  GPIO_Initstruct.Pull = GPIO_PULLDOWN;          //上拉
  GPIO_Initstruct.Speed = GPIO_SPEED_HIGH;     //高速
  HAL_GPIO_Init(GPIOE, &GPIO_Initstruct);

  GPIO_Initstruct.Pin = GPIO_PIN_2 | GPIO_PIN_4 | GPIO_PIN_5;
  GPIO_Initstruct.Mode = GPIO_MODE_OUTPUT_PP;      //推挽输出
  GPIO_Initstruct.Pull = GPIO_PULLDOWN;          //上拉
  GPIO_Initstruct.Speed = GPIO_SPEED_HIGH;     //高速
  HAL_GPIO_Init(GPIOE, &GPIO_Initstruct);
}

/* 主函数接口 */
void gpio_init(void)
{
  gpio_led_init();
  gpio_gray_init();
  gpio_ps2_init();
}



